Face Recognition by FaceNet
1. 论文简介
FaceNet 论文全称《FaceNet: A Unified Embedding for Face Recognition and Clustering》,2015年3月份Google出品的一篇人脸识别论文。该论文code在github上公布了源码,基于Tensorflow,并且后续一直更新,更添加了center loss以及MTCNN alignment代码在里面。该方法在LFW数据集上测试结果(99.63+-0.09)到目前2017.11依然是最好的。
2. 内容
该论文主要解决了人脸识别问题中训练样本不可能包含所有的人脸,那么一个训练好的模型如何去识别一对未知的人脸是否是同一个人?本文提出了一种策略将每一张人脸映射成一个128维的向量,向量之间的欧式距离即代表了人脸之间的相似度,如此对于模型没有见过的人脸也可以做Face verification 和 recognition。该文章采用了metric learning方式,类似于contrastive loss,尽可能的缩小intra_class距离,放大inter_class距离,采用了triplet loss的形式。
训练时对每一个batch,组成多个不同的3元组(即 Anchor, Positive, Negative),Positive与Anchor代表的是同一个人,Negative代表的是不同的人。Loss函数如上,采用的squear L2 loss,同时$\alpha$代表了margin距离。Loss的目的即通过网络的迭代后,同类别之间的图像欧氏距离+margin<不同类别之间的距离。
实验中Batch size 大概1800,同时尽可能保证同一个人有40张图片左右。如何去穷尽的列举一个Batch 中所有的三元组将会有很多,其中某些错误标签可能会影响模型收敛。文章中选取了所有的anchor-positive pairs,在选择anchor-negative pairs上采用了soft hardest的形式,具体如下:
对于某一对anchor-positive,选择距离大于其的所有anchor-negative 对。